Repository navigation
M1: the Windows eech_dc candidate as a reproducible, evidenced baseline (#19) - #60
Conversation
tools/build-windows.sh writes BUILD-INFO.txt beside the binaries: the source
commit, whether the build inputs had uncommitted changes, the build image,
the Rust and MinGW versions, and the SHA-256 of eech_dc.dll, eech-world.exe,
lua.dll and the Lua scripts. EECH_WIN_TARGET selects the cargo target volume,
so a from-scratch build can be compared with an incremental one.
lua/lifecycle.lua exercises the module's lifecycle and failure behaviour
through the public path (require ("eech_dc")), one case per process;
tools/lifecycle-windows.ps1 runs the cases and checks them against the
behaviour observed at 5f07697. A missing map directory crashes the host
(access violation in msvcrt.dll): it is checked as a known defect, not
approved behaviour.
No engine or host code changes.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01C64rJFJLY8BTJbC1QimZDK
docs/m1-baseline.md identifies the candidate (a8661ea, the build image and toolchain, SHA-256 of eech_dc.dll, eech-world.exe and lua.dll), records what was run at it and the actual results, and states what that evidence does and does not establish, with the remaining M1 gaps: - Windows public path (eech-world.exe -> require ("eech_dc")): retail Georgia and Lebanon, 3 simulated hours each: expectations 30/30 and 39/39, both IDENTICAL to regression/windows/ - lifecycle and failure (tools/lifecycle-windows.ps1): 5 cases pass; a missing map directory crashes the host (known defect) - a from-scratch rebuild: code and data byte-identical; file hashes differ (link timestamps, header checksum, COFF symbol table) - kernel (supporting, Linux x86-64): 20 tests, 1,401/1,401 corpus scenarios identical to the C reference regression/README.md: the lifecycle checks; Lebanon has 39 expectations, not 37, since 12e8f69. README.md points to the record. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01C64rJFJLY8BTJbC1QimZDK
fd-starscream-bot
left a comment
There was a problem hiding this comment.
The slice and evidence look sound, but the Remaining M1 gaps section needs to be aligned with the rewritten #19 before approval.
#19 deliberately makes the milestone exit question authoritative and allows unsupported/unverified behaviour to remain when it is explicit. Do not turn every discovered limitation into required M1 implementation work.
Please reclassify the current list:
- Actual M1 blocker: review/classify the behavioural corrections already present in the candidate.
- Potential M1 blocker only if it leaves contradictory current claims: reconcile older docs where they materially conflict with this baseline. Do not make wholesale documentation cleanup an M1 requirement.
- M1 acceptance step: the explicit review on #19.
The following are useful findings/limitations, but are not established by #19 as mandatory work before M1 can exit:
- deciding/fixing bad-installation behaviour;
- normalising Lua-binding errors or surfacing the engine rejection reason;
- manufacturing a frame-time fatal just to test poisoning (recording it as unverified is acceptable);
- running the supporting kernel on Windows;
- fixing repository CI.
Keep those as known limitations/follow-up candidates unless the M1 acceptance review determines one prevents a host from safely respecting the candidate.
Please make the same distinction in both the PR description and docs/m1-baseline.md. No engine/host changes are requested.
Review feedback on #60: not every limitation found is M1 work. The record now separates the M1 blocker (reviewing the behavioural corrections in the candidate), older claims to correct only where they contradict this baseline, the #19 acceptance review, and known limitations kept as follow-up candidates (bad installation input, binding error messages, unverified poisoning, the kernel on Windows, CI, bit-reproducibility). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01C64rJFJLY8BTJbC1QimZDK
|
Addressed the review in
No engine or host changes. The candidate stays |
fd-starscream-bot
left a comment
There was a problem hiding this comment.
Approved.
The requested change is addressed: the document now separates the actual #19 blocker from conditional reconciliation, the milestone acceptance step, and limitations/follow-up candidates.
I do not consider the lack of bit-for-bit PE reproducibility an M1 blocker. For #19, the candidate is identified by an exact source revision, build image/toolchain record and hashes for the tested artifacts; the clean rebuild additionally demonstrates identical loaded code/data while documenting the timestamp/checksum/symbol-table differences. That is sufficient evidence for the M1 purpose of developing against a known candidate. Full deterministic binary reproduction can remain a follow-up unless later distribution/release requirements make it necessary.
The candidate remains a8661ea; da9fde4 changes only its evidence record. No further changes requested for this slice.
4653982
into
claude/eech-campaign-native-spike-tjkj6g
Task and scope
Task: M1 slice: establish the current Windows
eech_dccandidate as a reproducible, evidenced M1 baseline.Epic / milestone: #19, M1 — Prepare the campaign module.
Base:
claude/eech-campaign-native-spike-tjkj6gat5f07697b.Candidate SHA:
a8661eaa, the build inputs. The PR head adds only the evidence document and README pointers on top, and doesn't change what is built.Outcome. This PR does four things:
eech_dc.dllcandidate exactly;The record is
eech-campaign/docs/m1-baseline.md.Non-goals: no engine or host code changes, no campaign/world split, no TSTL work. No GitHub CI campaign runs: campaign runs are local only.
Changes
tools/build-windows.sh: writesBUILD-INFO.txtwith the commit, an uncommitted-changes count, the image ID, the toolchain versions, and the SHA-256 of every output.EECH_WIN_TARGETselects the cargo target volume, which makes a from-scratch rebuild possible.crates/eech-world/lua/lifecycle.luaandtools/lifecycle-windows.ps1: lifecycle and failure checks throughrequire ("eech_dc"), one process per case, checked against the characterised behaviour.docs/m1-baseline.md(the evidence record), plus pointers inREADME.mdandregression/README.md.Baseline and behavioural evidence
The baseline is the integration branch at
5f07697b, whose engine and host code are identical to the candidate's.tools/build-windows.sh target/m1-candidate→BUILD-INFO.txta8661eaa, 0 uncommitted changes.eech_dc.dlldd8c6568…,eech-world.exe314fde3d…,lua.dlld0c799fe…EECH_WIN_TARGET=eech-win-target-m1-clean tools/build-windows.sh target/m1-cleantools\regress-windows.ps1 -Georgia <root> -Lebanon <root> -Bin target\m1-candidate -Exactregression/windows/(3 simulated hours each; 1,140 s)tools\lifecycle-windows.ps1 -Root <Lebanon root> -Bin target\m1-candidatemissing_mapcrashes the host)cargo test --locked -p eech-campaign -p eech-harness -p eech-sysRed/green: there's no defect fix in this PR. The lifecycle checks characterise existing behaviour, so they pass on the baseline code by design. Their sensitivity was shown instead: they fail on a root without the map.
Boundary: none discovered or changed. The whole engine, physical world included, is still inside
eech_dc.dll.Baseline differences: none.
regression/windows/is unchanged.Retained identities:
sha256:0c60c75d…;lebanon_retailandgeorgia_retail, seed 1, 3 simulated hours, 100 ms frames;Observed lifecycle limitations (details in the record):
eech:classification;msvcrt.dll).Known gaps and not-run checks:
5f07697b(to a conclusion, AddressSanitizer) were not reproduced;eech-world(lua5.1) before any test.Reproduction / rollback: the commands above, in
docs/m1-baseline.mdunder "Reproduce". This PR changes only tests, the build record and docs; reverting it restores5f07697b's behaviour exactly.Remaining M1 work and known limitations
This work is classified against #19's exit question. M1 can keep unsupported or unverified behaviour, as long as it is explicit.
M1 blocker:
A blocker only where an older claim contradicts this baseline:
docs/m1-baseline.md. Wholesale documentation cleanup is not M1 work.M1 acceptance step:
Known limitations and follow-up candidates (recorded in the document; not required for M1 to exit unless the acceptance review finds that one stops a host from safely respecting the candidate):
eech:messages, and the engine's rejection reason goes only to stderr.frame, it stays unverified. No such fatal was manufactured just to test it.Review and handover
fd-shockwave-bot.Needs a formal APPROVED review from @fd-starscream-bot before merge. Not self-merged.
Next bounded action: review and classify the behavioural corrections in the candidate (the M1 blocker).
🤖 Generated with Claude Code
https://claude.ai/code/session_01C64rJFJLY8BTJbC1QimZDK